package utils;

/**
 * 单例模式，对象只创建一次，直接使用。<br>
 * 若进行写操作，请使用getWriter方法；<br>
 * 若进行读操作，请使用getReader方法；<br>
 * 若进行删除操作，请使用getDeleter方法；<br>
 * 若进行一个文件名加密/解密操作，请使用getFileNameDE方法；<br>
 * 若进行一个数据加密/解密操作，请使用getDataDE方法。
 * 
 * @author jungle
 *
 */
public class FCDataSingles {

	private static FCDataWrite writer;
	private static FCDataRead reader;
	private static FCDataDelete deleter;
	private static FCFileNameDE fileNameDE;
	private static FCDataDecryptOrEncryption dataDE;

	private FCDataSingles() {

	}

	/**
	 * 一个数据写类对象
	 * 
	 * @return 一个FCDataWrite对象
	 */
	public static FCDataWrite getWriter() {
		if (writer == null) {
			synchronized (FCDataSingles.class) {
				if (writer == null) {
					writer = new FCDataWrite();
				}
			}
		}
		return writer;
	}

	/**
	 * 一个数据读取类对象
	 * 
	 * @return 一个FCDataRead对象
	 */
	public static FCDataRead getReader() {
		if (reader == null) {
			synchronized (FCDataSingles.class) {
				if (reader == null) {
					reader = new FCDataRead();
				}
			}
		}
		return reader;
	}

	/**
	 * 一个数据删除类对象
	 * 
	 * @return 一个FCDataDelete对象
	 */
	public static FCDataDelete getDeleter() {
		if (deleter == null) {
			synchronized (FCDataSingles.class) {
				if (deleter == null) {
					deleter = new FCDataDelete();
				}
			}
		}
		return deleter;
	}

	/**
	 * 一个文件名加密/解密对象
	 * 
	 * @return 一个FCFileNameDE对象
	 */
	public static FCFileNameDE getFileNameDE() {
		if (fileNameDE == null) {
			synchronized (FCDataSingles.class) {
				if (fileNameDE == null) {
					fileNameDE = new FCFileNameDE();
				}
			}
		}
		return fileNameDE;
	}

	/**
	 * 一个数据加密/解密对象
	 * 
	 * @return 一个FCDataDecryptOrEncryption对象
	 */
	public static FCDataDecryptOrEncryption getDataDE() {
		if (dataDE == null) {
			synchronized (FCDataSingles.class) {
				if (dataDE == null) {
					dataDE = new FCDataDecryptOrEncryption();
				}
			}
		}
		return dataDE;
	}

}
